﻿@model IEnumerable<TS2015.Models.TbLogService>
@using Kendo.Mvc.UI
@{
    ViewBag.Title = "Log Service";
}
<h4>Log Service</h4>
<div class="table-responsive">
    @( Html.Kendo().Grid<TS2015.Models.TbLogService>()
                    .Name("griddata")  // Tên của bảng buộc phải có trừ các thuộc tính dưới đây có thể có hoặc ko
                    .Pageable(page => page  // Phân trang
                            .ButtonCount(7)    // Số button hiển thị phân trang
                            .Info(true)   // Hiển thị thông tin dữ liệu dưới cùng góc bên phải Grid
                            .Refresh(true)   // Hiển thị nút làm mới Grid
                                    .Messages(mess => mess
                                    .Display("{0}-{1} của {2} bản ghi.")
                                    .Empty("Không có dữ liệu")
                                    .Refresh("Làm mới")
                                    .First("Trang đầu tiên")
                                    .Last("Trang cuối cùng")
                                    .Next("Trang tiếp")
                                    .Previous("Trang trước")
                                )
                             .Input(true)
                                    .Messages(mess =>
                                    {
                                        mess.Of("của {0}");
                                        mess.Page("Trang");
                                    })
                        )
                    .Columns(columns =>    // Cột muốn hiển thị trên Grid
                        {
                            columns.Template(@<text></text>).ClientTemplate("<input type='checkbox' class='checkbox center-block' />").Title("<input type='checkbox' class='checkbox center-block' onclick='cbChonTat(this);'/>");
                            columns.Bound(p => p.service);
                            //columns.Bound(p => p.username);
                            //columns.Bound(p => p.password);
                            columns.Bound(p => p.serviceid);
                            columns.Bound(p => p.msisdn);
                            columns.Bound(p => p.mode);
                            columns.Bound(p => p.chargetime).Format("{0:dd/MM/yyyy HH:mm:ss}");
                            columns.Bound(p => p.parameters);
                            columns.Bound(p => p.result);
                            //columns.Command(command =>
                            //{
                            //    command.Destroy().Text("Xóa");
                            //}).Title("Xoá");
                        })
        // Sửa kiểu popup
                        .Editable(editable =>
                        {
                            editable.Mode(GridEditMode.PopUp);
                            //editable.ConfirmDelete("Bạn có muốn xóa?");
                            editable.CreateAt(GridInsertRowPosition.Top);
                            editable.Window(window =>
                            {
                                //window.Width(450);
                            });
                            editable.DisplayDeleteConfirmation("Bạn có muốn xóa?");
                        })
                        .Sortable()    // Cho phép sắp xếp dữ liệu
        // Cho phép lọc dữ liệu
                        .Filterable(filterable => filterable
                                .Messages(mess => mess
                                    .And("Và")
                                    .Clear("Xóa")
                                    .Filter("Lọc")
                                    .Info("Điều kiện lọc tìm kiếm")
                                    )
                                    .Extra(false)
                                .Operators(operators => operators
                                    .ForString(str => str.Clear()
                                        .StartsWith("Bắt đầu với")
                                        .IsEqualTo("Đúng bằng")
                                        .IsNotEqualTo("Không bằng")
                                        .Contains("Bao gồm")
                                        .DoesNotContain("Không bao gồm")
                                    )
                                    .ForNumber(num => num
                                            .Clear()
                                            .IsGreaterThan("Lớn hơn")
                                            .IsEqualTo("Bằng")
                                            .IsNotEqualTo("Nhỏ hơn")
                                            .IsGreaterThanOrEqualTo("Lớn hơn bằng")
                                            .IsLessThanOrEqualTo("Nhỏ hơn bằng")
                                            )
                                    .ForDate(date=>date
                                        .Clear()
                                        .IsEqualTo("Bằng")
                                        .IsGreaterThan("Lớn hơn")
                                        .IsGreaterThanOrEqualTo("Lớn hơn bằng")
                                        .IsLessThan("Nhỏ hơn")
                                        .IsLessThanOrEqualTo("Nhỏ hơn bằng")
                                        .IsNotEqualTo("Không bằng")
                                    )
                                ))


                    // Cài đặt nguồn dữ liệu
                    .DataSource(dataSource => dataSource
                            .Ajax()   // Mọi thao tác thực hiện thông qua Ajax
                            .ServerOperation(false) // Ko cho gửi request bằng cách load lại trang mà thông qua Ajax
                            .PageSize(20)   // Số row hiển thị trên Grid
                            .Model(model =>
                                {
                                    model.Id(p => p.LogID);  // Chỉ ra khóa của Grid
                                }
                                )
                            .Sort(item =>
                            {
                                // Mặc định khi load dữ liệu lên Grid sẽ sắp xếp giảm theo Id
                                item.Add(data => data.LogID).Descending();
                            })
                        // Cài đặt các sự kiện khi thay đổi dữ liệu
                            .Events(events =>
                            {
                                events.Error("onError");
                                events.RequestEnd("onRequestEnd");
                            })
                        // Gán Action khi đổ dữ liệu lên Grid
                                        .Read(read => read.Action("Editing_ReadLogServices", "TbLogServices"))
                        // Xóa
                                        .Destroy(update => update.Action("Editing_DestroyLogServices", "TbLogServices"))
                    )  .ToolBar(toolbar =>
                    {
                        //toolbar.Custom().Text("Xuất PDF").Name("exportPDF");
                        toolbar.Template(@<text>
                            <div class="toolbar" style="float:right">
                                <a class="btn btn-danger" id='printGrid'>Xuất Excel</a>  
                                @*<button class="btn btn-danger" onclick='deleteAll()'>Xóa chọn</button>*@
                            </div>
                        </text>);
                    })
    )
</div>

<script>
    $("#printGrid").click(function (e) {
        //Get your data from kendo grid and apply filters
        var dataSource = $("#griddata").data("kendoGrid").dataSource;
        var filters = dataSource.filter();
        var allData = dataSource.data();
        var query = new kendo.data.Query(allData);
        var data = query.filter(filters).data;

        //Set your column headers
        //<th>username</th><th>password</th>
        var result = "<thead><tr><th>service</th><th>serviceid</th><th>msisdn</th><th>mode</th><th>chargetime</th><th>parameters</th><th>result</th></thead></tr>";

        result += "<tbody>";
        //Adding rows
        for (var i = 0; i < data.length; i++) {
            result += "<tr>";

            result += "<td>";
            result += data[i].service;
            result += "</td>";

            //result += "<td>";
            //result += data[i].username;
            //result += "</td>";

            //result += "<td>";
            //result += data[i].password;
            //result += "</td>";

            result += "<td>";
            result += data[i].serviceid;
            result += "</td>";

            result += "<td>";
            result += data[i].msisdn;
            result += "</td>";

            result += "<td>";
            result += data[i].mode;
            result += "</td>";

            result += "<td>";
            result += kendo.format("{0:dd/MM/yyyy hh:mm:ss}", data[i].chargetime);
            result += "</td>";

            result += "<td>";
            result += data[i].msisdn;
            result += "</td>";

            result += "<td>";
            result += data[i].parameters;
            result += "</td>";
 
            result += "<td>";
            result += data[i].result;
            result += "</td>";

            result += "</tr>";
        }

        result += "</tbody>";

        var uri = 'data:application/vnd.ms-excel;base64,'
             , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table cellpadding="5" style="font-family:\'Times New Roman\';font-size:16px;text-align:left !important">{table}</table></body></html>'
             , base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) }
             , format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) }

        var ctx = { worksheet: name || 'Worksheet', table: result }

        $(this).attr('download','LogService.xls');
        $(this).attr('href', uri + base64(format(template, ctx)));    
    });
</script>
 